/*
 * @Author: C.
 * @Date: 2025-04-15 16:26:12
 */
import fs from 'node:fs/promises';

import { format, getFileInfo, resolveConfig } from 'prettier';

/**
 * 使用 Prettier 格式化指定文件的内容。
 * 如果格式化后的内容与原始内容不同，则将格式化后的内容写回文件。
 *
 * @param filepath - 需要进行格式化的文件的路径。
 * @returns 格式化后的文件内容。
 */
async function prettierFormat(filepath: string) {
  // 解析指定文件的 Prettier 配置选项
  const prettierOptions = await resolveConfig(filepath, {});
  // 获取指定文件的信息，包括推断的解析器
  const fileInfo = await getFileInfo(filepath);
  // 以 UTF-8 编码读取指定文件的内容
  const input = await fs.readFile(filepath, 'utf8');
  // 使用 Prettier 对文件内容进行格式化
  const output = await format(input, {
    ...prettierOptions,
    // 使用推断的解析器进行格式化
    parser: fileInfo.inferredParser as any,
  });
  // 检查格式化后的内容是否与原始内容不同
  if (output !== input) {
    // 如果不同，则将格式化后的内容写回文件
    await fs.writeFile(filepath, output, 'utf8');
  }
  // 返回格式化后的文件内容
  return output;
}

export { prettierFormat };
